package com.tssup.fesco.common.oss.object;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;

import com.aliyun.oss.OSSClient;
import com.tssup.fesco.common.oss.AliOssClientFactory;
import com.tssup.fesco.common.oss.OSSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 上传对象
 *
 * @author shuchang.liao
 * @create 2017-05-15 11:14
 */
@Component
public class PutObject
{
	@Autowired
	private AliOssClientFactory aliOssClientFactory;
	/**
	 * 上传字符串
	 * 
	 * @param bucketName
	 *            Bucket名称
	 * @param key
	 *            对象在服务器上的存储路径，可包含子文件夹名称；例如item/description_1001.jpg
	 * @param content
	 *            待上传的字符串
	 * @return 返回上传结果<br/>
	 *         上传成功：返回对象的访问地址(url)<br/>
	 *         上传失败：返回null
	 */
	public String putSting(String bucketName, String key, String content)
	{
		ByteArrayInputStream inStream = null;

		try
		{
			inStream = new ByteArrayInputStream(content.getBytes());

			return this.putStream(bucketName, key, inStream);
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			if (null != inStream)
			{
				try
				{
					inStream.close();
				}
				catch (Exception e2)
				{
				}
			}
		}

		return null;
	}

	/**
	 * 上传流对象
	 * 
	 * @param bucketName
	 *            Bucket名称
	 * @param key
	 *            对象在服务器上的存储路径，可包含子文件夹名称；例如item/100101.jpg
	 * @param inStream
	 *            待上传的流对象
	 * @return 返回上传结果<br/>
	 *         上传成功：返回对象的访问地址(url)<br/>
	 *         上传失败：返回null
	 */
	public String putStream(String bucketName, String key, InputStream inStream)
	{
		OSSClient client = aliOssClientFactory.getClient();

		try
		{
			client.putObject(bucketName, key, inStream);
			
			String url = OSSUtil.getUrl(client, bucketName, key);

			return url;
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			if (null != client)
			{
				try
				{
					client.shutdown();
				}
				catch (Exception e2)
				{
				}
			}
		}

		return null;
	}

	/**
	 * 上传文件
	 * 
	 * @param bucketName
	 *            Bucket名称
	 * @param key
	 *            对象在服务器上的存储路径，可包含子文件夹名称；例如item/100101.jpg
	 * @param filepath
	 *            本地待上传文件的路径
	 * @return 返回上传结果<br/>
	 *         上传成功：返回对象的访问地址(url)<br/>
	 *         上传失败：返回null
	 */
	public String putFile(String bucketName, String key, String filepath)
	{
		OSSClient client = aliOssClientFactory.getClient();

		try
		{
			client.putObject(bucketName, key, new File(filepath));

			String url = OSSUtil.getUrl(client, bucketName, key);

			return url;
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			if (null != client)
			{
				try
				{
					client.shutdown();
				}
				catch (Exception e2)
				{
				}
			}
		}

		return null;
	}
}
